#ifndef  categorie_INC 
#define  categorie_INC

#include	"Article.h"
#include	"WikiException.cc"

#include	<map>
#include	<string>
#include	<iostream>

using namespace std;

class Categorie
{
	private:
		/**
 		 * identifiant unique de la categorie
 		 */
		int id;
		/**
 		 * nom de la categorie
 		 */
		string nom;
		/**
 		 * tableau des articles de la categorie courante
 		 * index : identifiant
 		 * valeur : pointeur sur l'article
 		 */
		map<int,Article*> * articles;

		/**
 		 * Iterateur de parcours utilise pour getArticle()
 		 * (initialises avec la fonction majIterateurs())
 		 */
		map<int,Article*>::iterator articles_it;

	public:
		/**
 		 * Constructeur
 		 */
		Categorie(int id, string nom);

		/**
 		 * Destructeur
 		 */
		~Categorie();

		/**
 		 * creer un nouvel article, lui attribut un nouvel id et le stocke dans le conteneur "articles"
 		 * return : l'identifiant de l'article
 		 */
		int creerArticle(string nom);

		/**
 		 * supprime l'article designe par l'identifiant
 		 */
		void supprimerArticle(int id);


		/**
 		 * Retourne une chaine decrivant la Categorie et son contenu
 		 */
		string toString();



 		/* -----  ACCESSEURS  ----- */
		int getId();
		void setNom(string nom);
		string getNom();

		/**
 		 * Retourne l'article pointee par l'identifiant 
 		 * si id=-1, retourne l'article pointee par l'iterateur articles_it et 
 		 * incremente l'iterateur.
 		 * Utiliser la methode majIterateurs() pour repartir au debut.
 		 * Utiliser "while(Article c = Serveur::getArticle())" pour un parcours
 		 * de tous les articles.
 		 */
		Article* getArticle(int id = -1);

		/**
 		 * retourne l'id de l'article correspondant au nom saisi
 		 * return : id ou -1 si l'article n'existe pas
 		 */
		int getArticleId(string nom);

		/*-------ITERATEURS------*/
		/**
 		 * cree et fait pointer les iterateurs de parcours au debut de chaque vecteur
 		 */
		void majIterateurs();

};
#endif
